package com.lry.jvm.instructions.base;

import com.lry.jvm.rtda.Frame;

/**
 * const: 推至栈顶
 * loads: 局部变量表->栈
 * stores: 栈->局部变量表
 * stack: 栈操作，交换，复制等
 * math: 数学指令，栈操作
 * conversions: 强转指令 ，栈操作
 */
public interface Instruction {

    byte getOpCode();

    default String getReName() {
        return this.getClass().getSimpleName();
    }

    /**
     * 从字节码中提取操作数
     *
     * @param reader
     */
    void fetchOperands(BytecodeReader reader) throws Exception;

    /**
     * 执行逻辑指令
     *
     * @param frame
     */
    void execute(Frame frame) throws Exception;
}
